/**
 * file-operations.js - 文件操作相关功能
 * 包含文件上传、下载、删除和详情查看等功能
 */

// 上传文件
function uploadFiles(files) {
    logDebug(`开始上传 ${files.length} 个文件`);
    
    // 创建上传进度容器
    const progressContainer = createUploadProgressContainer(files.length);
    
    // 设置上传状态
    let totalFiles = files.length;
    let completedFiles = 0;
    let failedFiles = 0;
    
    // 绑定取消按钮事件
    $('#cancelUploadBtn').off('click').on('click', function() {
        progressContainer.hide();
        showToast('已取消', '文件上传已取消', 'warning');
    });
    
    // 处理每个文件上传
    for (let i = 0; i < files.length; i++) {
        const file = files[i];
        const formData = new FormData();
        formData.append('file', file);
        
        logDebug(`准备上传: ${file.name} (${formatFileSize(file.size)})`);
        
        // 更新当前上传文件名
        $('#currentFileName').text(file.name);
        
        // 上传文件
        $.ajax({
            url: '/upload',
            type: 'POST',
            data: formData,
            processData: false,
            contentType: false,
            success: function(response) {
                completedFiles++;
                
                // 更新进度条
                updateProgress(completedFiles, totalFiles);
                
                if (response.success) {
                    logDebug(`文件上传成功: ${file.name}`);
                } else {
                    failedFiles++;
                    logDebug(`文件上传失败: ${response.message || '未知错误'}`);
                    showToast('上传失败', `文件 ${file.name} 上传失败: ${response.message}`, 'danger');
                }
                
                // 检查是否所有文件都已处理
                checkUploadCompletion(completedFiles, totalFiles, failedFiles);
            },
            error: function(xhr, status, error) {
                completedFiles++;
                failedFiles++;
                
                // 更新进度条
                updateProgress(completedFiles, totalFiles);
                
                logDebug(`上传错误: ${error}, 状态: ${status}`);
                console.error('上传错误:', xhr.responseText);
                showToast('上传错误', `文件 ${file.name} 上传失败，请检查网络连接`, 'danger');
                
                // 检查是否所有文件都已处理
                checkUploadCompletion(completedFiles, totalFiles, failedFiles);
            }
        });
    }
    
    // 检查上传是否完成
    function checkUploadCompletion(completed, total, failed) {
        if (completed === total) {
            // 隐藏进度条
            setTimeout(function() {
                progressContainer.hide();
                
                // 显示最终结果通知
                if (failed === 0) {
                    if (total === 1) {
                        showToast('上传成功', `文件已成功上传`, 'success');
                    } else {
                        showToast('上传成功', `全部 ${total} 个文件已成功上传`, 'success');
                    }
                } else {
                    showToast('上传完成', `${total-failed}/${total} 个文件上传成功，${failed} 个失败`, 'warning');
                }
                
                // 刷新文件列表
                refreshList();
            }, 500);
        }
    }
}

// 显示文件详情
function showFileDetails(fileName) {
    // 参数检查
    if (!fileName) {
        alert('无效的文件名');
        return;
    }
    
    // 先显示加载状态
    const fileDetailsModal = new bootstrap.Modal(document.getElementById('fileDetailsModal'));
    $('#fileDetailsName').text('加载中...');
    $('#fileDetailsMimeType').text('加载中...');
    $('#fileDetailsSize').text('加载中...');
    $('#fileDetailsTime').text('加载中...');
    $('#fileDetailsUrl').text('加载中...');
    $('#fileDetailsEtag').text('加载中...');
    $('#fileDetailsStorageType').text('加载中...');
    $('#filePreviewContainer').html('<div class="spinner-border text-primary" role="status"><span class="visually-hidden">加载中...</span></div>');
    fileDetailsModal.show();
    
    // 通过AJAX获取文件详情
    $.ajax({
        url: '/fileDetails',
        type: 'GET',
        data: { fileName: fileName },
        dataType: 'json',
        success: function(response) {
            if (response.success) {
                // 设置文件详情
                $('#fileDetailsName').text(response.fileName || '未知');
                $('#fileDetailsMimeType').text(response.mimeType || '未知');
                $('#fileDetailsSize').text(formatFileSize(response.size) || '0 B');
                $('#fileDetailsTime').text(formatTime(response.putTime) || '未知');
                $('#fileDetailsUrl').text(response.url || '未知');
                $('#fileDetailsEtag').text(response.etag || '未知');
                $('#fileDetailsStorageType').text(response.storageType || '未知');
                
                // 准备预览内容
                const previewContainer = $('#filePreviewContainer');
                previewContainer.empty();
                
                // 判断文件类型并生成预览
                if (response.mimeType && response.mimeType.includes('image') && response.url) {
                    // 图片预览
                    $('<img>')
                        .attr('src', response.url)
                        .attr('alt', response.fileName)
                        .addClass('img-fluid mb-3')
                        .css('max-height', '200px')
                        .appendTo(previewContainer);
                } else {
                    // 非图片文件图标
                    let iconClass = 'bi-file-earmark';
                    const mimeType = response.mimeType;
                    if (mimeType) {
                        if (mimeType.includes('pdf')) iconClass = 'bi-file-earmark-pdf';
                        else if (mimeType.includes('word')) iconClass = 'bi-file-earmark-word';
                        else if (mimeType.includes('excel') || mimeType.includes('spreadsheet')) iconClass = 'bi-file-earmark-excel';
                        else if (mimeType.includes('zip') || mimeType.includes('compressed')) iconClass = 'bi-file-earmark-zip';
                    }
                    
                    $('<i>')
                        .addClass('bi ' + iconClass)
                        .css('font-size', '5rem')
                        .appendTo(previewContainer);
                }
            } else {
                // 显示错误信息
                $('#filePreviewContainer').html('<div class="alert alert-danger">' + (response.message || '获取文件详情失败') + '</div>');
                $('#fileDetailsName').text('出错');
                $('#fileDetailsMimeType').text('出错');
                $('#fileDetailsSize').text('出错');
                $('#fileDetailsTime').text('出错');
                $('#fileDetailsUrl').text('出错');
                $('#fileDetailsEtag').text('出错');
                $('#fileDetailsStorageType').text('出错');
            }
        },
        error: function(xhr, status, error) {
            // 请求失败
            console.error('获取文件详情失败:', error);
            $('#filePreviewContainer').html('<div class="alert alert-danger">无法连接到服务器: ' + error + '</div>');
            $('#fileDetailsName').text('出错');
            $('#fileDetailsMimeType').text('出错');
            $('#fileDetailsSize').text('出错');
            $('#fileDetailsTime').text('出错');
            $('#fileDetailsUrl').text('出错');
            $('#fileDetailsEtag').text('出错');
            $('#fileDetailsStorageType').text('出错');
        }
    });
}

// 确认下载
function confirmDownload(fileName) {
    $('#downloadFileName').text(fileName);
    $('#confirmDownloadBtn').off('click').on('click', function() {
        downloadFile(fileName);
        bootstrap.Modal.getInstance(document.getElementById('downloadConfirmModal')).hide();
    });
    
    const downloadModal = new bootstrap.Modal(document.getElementById('downloadConfirmModal'));
    downloadModal.show();
}

// 确认删除
function confirmDelete(fileName) {
    $('#deleteFileName').text(fileName);
    $('#confirmDeleteBtn').off('click').on('click', function() {
        deleteFile(fileName);
        bootstrap.Modal.getInstance(document.getElementById('deleteConfirmModal')).hide();
    });
    
    const deleteModal = new bootstrap.Modal(document.getElementById('deleteConfirmModal'));
    deleteModal.show();
}

// 下载文件
function downloadFile(fileName) {
    // 直接使用下载链接
    window.location.href = '/download?fileName=' + encodeURIComponent(fileName);
}

// 删除文件
function deleteFile(fileName) {
    $.ajax({
        url: '/delete?fileName=' + encodeURIComponent(fileName),
        type: 'DELETE',
        success: function(response) {
            if (response.success) {
                showToast('成功', '文件删除成功', 'success');
                refreshList();
            } else {
                showToast('错误', '删除失败: ' + response.message, 'danger');
            }
        },
        error: function() {
            showToast('错误', '删除请求失败，请重试', 'danger');
        }
    });
}

// 显示重命名对话框
function showRenameDialog(fileName) {
    // 拆分文件名和扩展名
    const lastDotIndex = fileName.lastIndexOf('.');
    const extension = lastDotIndex > 0 ? fileName.substring(lastDotIndex) : '';
    const nameWithoutExt = lastDotIndex > 0 ? fileName.substring(0, lastDotIndex) : fileName;
    
    // 设置当前文件名
    $('#currentFileName').val(fileName);
    $('#newFileName').val(fileName);
    
    // 打开模态框
    const renameModal = new bootstrap.Modal(document.getElementById('renameModal'));
    renameModal.show();
    
    // 确认重命名按钮事件
    $('#confirmRenameBtn').off('click').on('click', function() {
        const newFileName = $('#newFileName').val().trim();
        
        // 验证新文件名
        if (!newFileName) {
            showToast('错误', '文件名不能为空', 'danger');
            return;
        }
        
        // 执行重命名操作
        renameFile(fileName, newFileName);
        renameModal.hide();
    });
    
    // 聚焦新文件名输入框
    setTimeout(function() {
        const input = document.getElementById('newFileName');
        input.focus();
        
        // 如果有扩展名，则选中除扩展名外的部分
        if (extension) {
            input.setSelectionRange(0, nameWithoutExt.length);
        } else {
            input.select();
        }
    }, 500);
}

// 重命名文件
function renameFile(oldFileName, newFileName) {
    // 参数检查
    if (!oldFileName || !newFileName) {
        showToast('错误', '文件名不能为空', 'danger');
        return;
    }
    
    // 如果新旧文件名相同，则不执行操作
    if (oldFileName === newFileName) {
        showToast('提示', '文件名未更改', 'info');
        return;
    }
    
    // 发送重命名请求
    $.ajax({
        url: '/rename',
        type: 'POST',
        data: {
            oldFileName: oldFileName,
            newFileName: newFileName
        },
        success: function(response) {
            if (response.success) {
                showToast('成功', '文件重命名成功', 'success');
                refreshList();
            } else {
                showToast('错误', '重命名失败: ' + response.message, 'danger');
            }
        },
        error: function(xhr) {
            const errorMsg = xhr.responseJSON && xhr.responseJSON.message 
                ? xhr.responseJSON.message 
                : '重命名请求失败，请重试';
            showToast('错误', errorMsg, 'danger');
        }
    });
}

// 显示共享对话框
function showShareDialog(fileName) {
    // 设置文件名
    $('#shareFileName').text(fileName);
    
    // 重置表单
    $('#shareExpiration').val('24');
    $('#shareLinkContainer').hide();
    
    // 打开模态框
    const shareModal = new bootstrap.Modal(document.getElementById('shareModal'));
    shareModal.show();
    
    // 生成共享链接按钮事件
    $('#generateShareLinkBtn').off('click').on('click', function() {
        const expirationHours = parseInt($('#shareExpiration').val());
        
        // 生成共享链接
        generateShareLink(fileName, expirationHours);
    });
    
    // 复制共享链接按钮事件
    $('#copyShareLinkBtn').off('click').on('click', function() {
        const linkInput = document.getElementById('shareLink');
        linkInput.select();
        document.execCommand('copy');
        showToast('成功', '链接已复制到剪贴板', 'success');
    });
}

// 生成共享链接
function generateShareLink(fileName, expirationHours) {
    // 参数检查
    if (!fileName) {
        showToast('错误', '文件名不能为空', 'danger');
        return;
    }
    
    // 显示加载状态
    $('#generateShareLinkBtn').prop('disabled', true).html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> 生成中...');
    
    // 发送共享请求
    $.ajax({
        url: '/share',
        type: 'POST',
        data: {
            fileName: fileName,
            expirationHours: expirationHours
        },
        success: function(response) {
            $('#generateShareLinkBtn').prop('disabled', false).html('生成共享链接');
            
            if (response.success) {
                // 显示共享链接
                $('#shareLink').val(response.shareUrl);
                $('#shareLinkContainer').slideDown();
                
                showToast('成功', '共享链接已生成', 'success');
            } else {
                showToast('错误', '生成共享链接失败: ' + response.message, 'danger');
            }
        },
        error: function() {
            $('#generateShareLinkBtn').prop('disabled', false).html('生成共享链接');
            showToast('错误', '生成共享链接请求失败，请重试', 'danger');
        }
    });
} 